package com.example.demo.pojo.dto.dingtalk;

import cn.hutool.core.util.StrUtil;
import com.example.demo.enums.DingMsgTypeEnum;
import lombok.Data;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

/**
 * 钉钉机器人FeedCard类型消息通知请求dto
 *
 * @author TongDaShuai
 * @since 2021/12/14
 */
@Data
public class FeedCardReqDto extends BaseRobotMsgNotifyReqDto {


    /**
     * actionCard类型消息
     */
    private FeedCardDto feedCard;

    /**
     * 构建请求参数
     *
     * @return
     */
    public static FeedCardReqDto build() {
        FeedCardReqDto req = new FeedCardReqDto();
        req.setMsgtype(DingMsgTypeEnum.feedCard.name());
        return req;
    }



    /**
     * 设置 多条消息链接
     *
     * @param links 多条消息链接
     * @return
     */
    public FeedCardReqDto links(List<LinkDto> links) {
        if (this.feedCard == null) {
            this.feedCard = new FeedCardDto();
        }
        this.feedCard.links = links;
        return this;
    }

    /**
     * 设置 多条消息链接
     *
     * @param link 单条消息链接
     * @return
     */
    public FeedCardReqDto link(LinkDto link) {
        if (this.feedCard == null) {
            this.feedCard = new FeedCardDto();
        }
        if (this.feedCard.links == null) {
            this.feedCard.links = new ArrayList<>();
        }
        this.feedCard.links.add(link);
        return this;
    }

    /**
     * 多个消息链接dto
     *
     * @author TongDaShuai
     * @since 2021/12/15
     */
    @Data
    public static class FeedCardDto {

        /**
         * 多个消息链接
         */
        List<LinkDto> links;

    }

    /**
     * 单个消息链接dto
     *
     * @author TongDaShuai
     * @since 2021/12/15
     */
    @Data
    public static class LinkDto {


        /**
         * 单条信息文本
         */
        private String title;

        /**
         * 单条信息后面图片的URL
         */
        private String picURL;

        /**
         * 点击单条信息到跳转链接。
         * 打开方式如下：
         * 移动端，在钉钉客户端内打开
         * PC端
         * 默认侧边栏打开
         * 希望在外部浏览器打开，请参考消息链接说明:https://open.dingtalk.com/document/orgapp-server/message-link-description
         */
        private String messageURL;

        /**
         * 构建LinkDto实体类
         *
         * @return
         */
        public static LinkDto build() {
            return new LinkDto();
        }

        /**
         * 设置 单条信息文本
         *
         * @param title 单条信息文本
         * @return
         */
        public LinkDto title(String title) {
            this.title = title;
            return this;
        }

        /**
         * 设置 单条信息后面图片的URL
         *
         * @param picURL 单条信息后面图片的URL
         * @return
         */
        public LinkDto picURL(String picURL) {
            this.picURL = picURL;
            return this;
        }


        /**
         * 设置 单条信息到跳转链接
         *
         * @param messageURL 单条信息到跳转链接
         * @param pcSlide true,表示在PC客户端侧边栏打开;false：表示在浏览器打开
         * @return
         */
        public LinkDto messageURL(String messageURL, boolean pcSlide) throws UnsupportedEncodingException {
            String encUrl = URLEncoder.encode(messageURL, "UTF-8");
            this.messageURL = StrUtil.format("dingtalk://dingtalkclient/page/link?url={}&pc_slide={}", encUrl, pcSlide);
            return this;
        }

        /**
         * 设置 点击消息跳转的URL(默认在浏览器打开)
         *
         * @param messageURL 点击消息跳转的URL
         * @return
         */
        public LinkDto messageURL(String messageURL) throws UnsupportedEncodingException {
            return messageURL(messageURL, false);
        }
    }

}
